/* TypeScript 错误 ts(2355) 演示和修复 */

// ❌ 错误示例 1: 函数声明了返回类型但没有返回值
function getUserName(id: number): string {
  // A function whose declared type is neither 'undefined', 'void', nor 'any' must return a value. ts(2355)
  console.log(`Getting user with id: ${id}`);
  // 缺少 return 语句
}

// ✅ 修复方法 1: 添加返回值
function getUserNameFixed(id: number): string {
  console.log(`Getting user with id: ${id}`);
  return `User-${id}`; // 添加返回值
}

// ❌ 错误示例 2: 条件分支中缺少返回值
function getGrade(score: number): string {
  if (score >= 90) {
    return "A";
  } else if (score >= 80) {
    return "B";
  } else if (score >= 70) {
    return "C";
  }
  // 当 score < 70 时，没有返回值
  // A function whose declared type is neither 'undefined', 'void', nor 'any' must return a value. ts(2355)
}

// ✅ 修复方法 2a: 确保所有分支都有返回值
function getGradeFixed1(score: number): string {
  if (score >= 90) {
    return "A";
  } else if (score >= 80) {
    return "B";
  } else if (score >= 70) {
    return "C";
  } else {
    return "F"; // 添加默认返回值
  }
}

// ✅ 修复方法 2b: 使用最后的默认返回值
function getGradeFixed2(score: number): string {
  if (score >= 90) {
    return "A";
  } else if (score >= 80) {
    return "B";
  } else if (score >= 70) {
    return "C";
  }
  return "F"; // 默认返回值
}

// ❌ 错误示例 3: 复杂逻辑中的遗漏
function processData(data: any[]): number {
  if (data.length === 0) {
    return 0;
  }
  
  for (let item of data) {
    if (item.isValid) {
      // 某些情况下可能直接返回
      if (item.value > 100) {
        return item.value;
      }
    }
  }
  // 循环结束后没有返回值
  // A function whose declared type is neither 'undefined', 'void', nor 'any' must return a value. ts(2355)
}

// ✅ 修复方法 3: 确保函数末尾有返回值
function processDataFixed(data: any[]): number {
  if (data.length === 0) {
    return 0;
  }
  
  for (let item of data) {
    if (item.isValid) {
      if (item.value > 100) {
        return item.value;
      }
    }
  }
  
  return -1; // 默认返回值，表示没有找到符合条件的数据
}

// ✅ 替代方案 1: 使用联合类型包含 undefined
function getUserNameMaybeUndefined(id: number): string | undefined {
  if (id > 0) {
    return `User-${id}`;
  }
  // 可以不返回，因为返回类型包含 undefined
}

// ✅ 替代方案 2: 声明返回类型为 void
function logUserInfo(id: number): void {
  console.log(`User ID: ${id}`);
  // void 类型的函数不需要返回值
}

// ✅ 替代方案 3: 使用 never 类型（用于永远不会正常返回的函数）
function throwError(message: string): never {
  throw new Error(message);
  // never 类型表示函数永远不会正常返回
}

// ❌ 错误示例 4: 箭头函数的问题
const calculateArea = (radius: number): number => {
  const area = Math.PI * radius * radius;
  // 忘记返回计算结果
  // A function whose declared type is neither 'undefined', 'void', nor 'any' must return a value. ts(2355)
};

// ✅ 修复方法 4: 箭头函数返回值
const calculateAreaFixed = (radius: number): number => {
  const area = Math.PI * radius * radius;
  return area; // 返回计算结果
};

// 或者使用表达式形式的箭头函数
const calculateAreaExpression = (radius: number): number => Math.PI * radius * radius;

/* 总结：修复 ts(2355) 错误的方法
1. 确保函数在所有代码路径中都有返回值
2. 如果函数可能不返回值，使用联合类型包含 undefined
3. 如果函数不需要返回值，声明返回类型为 void
4. 仔细检查条件分支，确保每个分支都有适当的返回语句
5. 在函数末尾添加默认返回值作为安全网
*/